// 配置路由的地方
import Vue from 'vue'
import VueRouter from 'vue-router'

// 使用插件
Vue.use(VueRouter)
// 引入store
import store from '@/store'

import routes from './routes'

// 先把 VueRouter 原型对象的 push, 先保存一份
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace

// 重写 push|replace
VueRouter.prototype.push = function (location, resolve, reject) {
    if (resolve && reject) {
        originPush.call(this, location, resolve, reject)
    } else {
        originPush.call(this, location, () => { }, () => { })
    }
}
VueRouter.prototype.replace = function (location, resolve, reject) {
    if (resolve && reject) {
        originReplace.call(this, location, resolve, reject)
    } else {
        originReplace.call(this, location, () => { }, () => { })
    }
}

// 配置路由
let router = new VueRouter({
    routes,
    // 滚动行为
    scrollBehavior(to, from, savedPosition) {
        return { y: 0 }
    }
})

// 全局守卫：前置守卫（在路由跳转之间进行判断）
router.beforeEach(async(to, from, next) => {
    // to:可以获取到你要跳转到那个路由信息
    // from:可以获取到你从哪个路由而来的信息
    // next:放行函数 next(path)放行到指定路由 next(false)
    // next()
    let token = store.state.user.token
    // 用户信息
    let name = store.state.user.userInfo.name
    // 用户已经登录
    if (token) {
        // 用户已经登录还想去login【不能去，停留在首页】
        if(to.path=='/login'||to.path=='/register'){
            next('/home')
        }else{
            // 登录，去的不是login【home|search|detail|shopcart】
            // 如果用户名已有
            if(name){
                next()
            }else{
                // 没有用户信息，派发action让仓库存储用户信息再跳转
                try {
                    await store.dispatch('getUserInfo')
                    // 放行
                    next()
                } catch (error) {
                    // token失效了获取不到用户信息，重新登录
                    // 清除token
                    await store.dispatch('userLogout')
                    next('/login')
                }
            }
        }
    }else{
        // 未登录，不能去交易相关页面【pay、paysucces】、不能去个人中心
        let toPath = to.path
        if(toPath.indexOf('/trade') != -1 || toPath.indexOf('pay') != -1 || toPath.indexOf('/center') != -1){
            // 把未登录的时候相去而没有去成的信息存储与地址栏中【路由】
            next('/login?redirect='+toPath)
        }else{
            // 去的不是上面这些路由(home|search|shopcart)---放行
            next()
        }
        // next()
    }
})

export default router